package effect import ( "blazing/logic/service/fight/info" "blazing/logic/service/fight/input" "blazing/logic/service/fight/node" ) func init() { //技能使用成功时,m%自身XX等级+/-n input.InitEffect(input.EffectType.Skill, 4, NewEffectStat(false)) //技能使用成功时,m%对方XX等级+/-n input.InitEffect(input.EffectType.Skill, 5, NewEffectStat(true)) } func NewEffectStat(b bool) input.Effect { return &EffectStat{ node.EffectNode{}, b, } } type EffectStat struct { node.EffectNode Etype bool } // func (this *EffectStat) GetPet() { // ff := this.EffectNode.GetOwnerPet() // offsetC := unsafe.Offsetof(ff.Atk) // c字段的偏移量(通常为4+16=20) // // 2. 将结构体指针转换为原始内存地址(uintptr) // baseAddr := uintptr(unsafe.Pointer(&offsetC)) // // 3. 计算字段地址并赋值 // // 给a字段赋值(通过偏移量) // addrA := unsafe.Pointer(baseAddr + 4) //根据攻击算其他字段 // *(*uint32)(addrA) = 100 // } func (e *EffectStat) OnHit(opp *input.Input, skill *info.SkillEntity) { t, _, _ := e.Input.Player.Roll(e.EffectNode.SideEffectArgs[1], 100) if t { if !e.Etype { //自身 e.Input.SetProp(e.EffectNode.SideEffectArgs[0], e.EffectNode.SideEffectArgs[2]) } else { //对方 opp.SetProp(e.EffectNode.SideEffectArgs[0], e.EffectNode.SideEffectArgs[2]) } } }